/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.senac.maisconhecimento.dao;

import br.senac.maisconhecimento.entidade.Livro;
import br.senac.maisconhecimento.entidade.Usuario;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Marcus Lemos
 */
public class LivroDAO extends GenericDao<Livro> {

    private Session session = HibernateUtil.getSessionFactory().openSession();

    @SuppressWarnings("unchecked")
    public List<Livro> listar() {
        List<Livro> lista = null;

        try {
            String sql = "Select l from Livro as l";

            session.beginTransaction();
            org.hibernate.Query query = session.createQuery(sql);
            lista = (List<Livro>) query.list();
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.print(e.getMessage());
        }

        return lista;
    }

    public List<Livro> listarAtivos() {
        List<Livro> lista = null;

        try {
            String sql = "Select l from Livro as l where l.ativo = 1";

            session.beginTransaction();
            org.hibernate.Query query = session.createQuery(sql);
            lista = (List<Livro>) query.list();
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.print(e.getMessage());
        }

        return lista;
    }

    public List<Livro> filtrarAtivos(int isbn, int codigoCategoria, String nome, String autor) {
        List<Livro> lista = null;

        try {
            session.beginTransaction();

            Criteria crit = session.createCriteria(Livro.class);
            crit.add(Restrictions.eq("ativo", true));

            if (isbn > 0) {
                crit.add(Restrictions.eq("isbn", isbn));
            }

            if (codigoCategoria > 0) {
                crit.add(Restrictions.eq("categoria.id", codigoCategoria));
            }

            if (nome != null) {
                if (nome.equals("") == false) {
                    crit.add(Restrictions.like("nome", "%" + nome + "%"));
                }
            }

            if (autor != null) {
                if (autor.equals("") == false) {
                    crit.add(Restrictions.like("autor", "%" + autor + "%"));
                }
            }

            lista = (List<Livro>) crit.list();
            
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.print(e.getMessage());
        }

        return lista;
    }

    public Livro consultar(Integer codigo) {
        Livro entidade = new Livro();
        try {
            session.beginTransaction();
            entidade = (Livro) session.load(Livro.class, codigo);
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
        }

        return entidade;
    }
}
